package net.crozz.openapi.qq;

import net.crozz.openapi.ApiException;
import net.crozz.openapi.http.Param;
import net.crozz.openapi.http.Requester;
import net.crozz.openapi.qq.model.user.Resp_get_info;
import net.crozz.openapi.qq.model.user.Resp_get_other_info;
import net.crozz.openapi.qq.model.user.Resp_get_user_info;

public class User {

    private final Requester client;
    private final String    baseURL;
    private final String    client_id;

    User(Requester client, String baseURL, String client_id) {
        this.client = client;
        this.baseURL = baseURL;
        this.client_id = client_id;
    }

    /**
     * 获取腾讯微博登录用户的用户资料。
     * 使用 {@link T} 中的client_id
     * 文档地址：http://wiki.connect.qq.com/get_info
     *
     * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
     * @param openid       用户的ID，与QQ号码一一对应。
     */
    public Resp_get_info get_info(String access_token, String openid) throws ApiException {
        return client.getObj(
                Resp_get_info.class,
                baseURL + "user/get_info",
                Param.newParam("access_token", access_token),
                Param.newParam("openid", openid),
                Param.newParam("oauth_consumer_key", client_id),
                Param.newParam("format", "json")
        );
    }

    /**
     * 获取登录用户在QQ空间的信息，包括昵称、头像、性别及黄钻信息（包括黄钻等级、是否年费黄钻等）。此接口仅支持网站调用
     * 文档地址：http://wiki.connect.qq.com/get_user_info
     *
     * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
     * @param openid       用户的ID，与QQ号码一一对应。
     *                     可通过调用https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN 来获取。
     */
    public Resp_get_user_info get_user_info(String access_token, String openid) throws ApiException {
        return client.getObj(
                Resp_get_user_info.class,
                baseURL + "user/get_user_info",
                Param.newParam("access_token", access_token),
                Param.newParam("openid", openid),
                Param.newParam("oauth_consumer_key", client_id),
                Param.newParam("format", "json")
        );
    }

    /**
     * 获取腾讯微博其他用户详细信息。
     * 文档地址：http://wiki.connect.qq.com/get_other_info
     *
     * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
     * @param openid       用户的ID，与QQ号码一一对应。
     * @param name         其他用户的账户名。可选，name和fopenid至少选一个，若同时存在则以name值为主。
     * @param fopenid      其他用户的账户名。可选，name和fopenid至少选一个，若同时存在则以name值为主。
     */
    public Resp_get_other_info get_other_info(
            String access_token, String openid,
            String name, String fopenid
    ) throws ApiException {
        return client.postObj(
                Resp_get_other_info.class,
                baseURL + "user/get_other_info",
                Param.newParam("access_token", access_token),
                Param.newParam("openid", openid),
                Param.newParam("name", name),
                Param.newParam("fopenid", fopenid),
                Param.newParam("oauth_consumer_key", client_id),
                Param.newParam("format", "json")
        );
    }

}
